package main

import "fmt"

//1、for range 复制行为,复制要么复制指针，要么复制完整的对象、影响最大的是数组。
//2、使用range迭代遍历引用类型时，底层的数据不会被复制
func main() {
	a := [3]int{1, 2, 3}

	//range a实际上执行了一次range a.copy
	//v的值相当于是从每次a.copy里面拿出来的，a[1]修改的原来a数组的值，这对复制过后的对象根本没有影响
	//v相当于是a.copy里的；而a[i]修改的原来a里面的值
	for i, v := range a { //每次遍历a，都是对a的一个值复制
		fmt.Println(a)
		if i == 0 {
			a[1], a[2] = 100, 200 //[1 100 200]
			fmt.Println(a)
		}
		a[i] = v + 100
	}
	fmt.Println(a) //[101 102 103]
}
